package main;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Vector;

import modelo.Datos;
import modelo.LineaView;
import modelo.Plan;
import modelo.PlanAdicional;
import modelo.PlanBase;
import modelo.PlanPrePago;
import modelo.Servicio;
import modelo.Sms;
import modelo.UsuarioView;
import modelo.Voz;

import controlador.TelefoniaMovil;


public class MainTelefoniaMovil {
	
	private TelefoniaMovil tm;
		
	public MainTelefoniaMovil() {
		tm = new TelefoniaMovil();
	}

	
	
	public void mostrarMenu() 
	{
		
		//TODO TEST
		Servicio voz = new Voz(1.10);
		Servicio datos = new Datos(0.50);
		Servicio sms = new Sms(0.13);
		
				
        Plan planBase = new PlanBase(1,100,(float) 0.50);
        planBase.agregarServicio(voz);
        planBase.agregarServicio(datos);
        planBase.agregarServicio(sms);
        
        Plan planAdicional = new PlanAdicional(2,80,(float) 0.70);
        planAdicional.agregarServicio(voz);
        planAdicional.agregarServicio(datos);
        planAdicional.agregarServicio(sms);
        
        Plan planPrepago = new PlanPrePago(3);
        planPrepago.agregarServicio(voz);
        planPrepago.agregarServicio(sms);
                
        tm.test(planBase);
        tm.test(planAdicional);
        tm.test(planPrepago);
		//TODO FIN TEST
        		
		BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
	 	
		System.out.println("MENU DE OPCIONES");
		System.out.println("-------------------------------------------------------");
		System.out.println("1.- Crear Usuario");
		System.out.println("2.- Modificar Usuario");
		System.out.println("3.- Baja Usuario");
		System.out.println("4.- Crear Linea Principal");
		System.out.println("5.- Agregar Linea Adicional");
		System.out.println("6.- Modificar Linea Principal");
		System.out.println("7.- Modificar Linea Adicional");
		System.out.println("8.- Baja Linea Principal");
		System.out.println("9.- Baja Linea Adicional");
		System.out.println("10.- Alta Plan");
		System.out.println("11.- Baja Plan");
		System.out.println("12.- Modificar Plan");
		System.out.println("13.- Alta Servicio");
		System.out.println("14.- Baja Servicio");
		System.out.println("15.- Modificar Servicio");
		System.out.println("16.- Simular Consumo");
		System.out.println("17.- Facturar");
		System.out.println("18.- Salir");
		System.out.println("-------------------------------------------------------");
		System.out.print("Opcion:");
		try
		{
			char s = (char)reader.read();
			
		  	switch (s)
		  	{
		  		case '1' : this.crearUsuario();
			  	case '2' : this.modificarUsuario();
			  	case '3' : this.borrarUsuario();
			  	case '4' : this.crearLineaPrincipal();
			  	case '5' : this.agregarLineaAdicional();
			  	case '6' : this.modificarLineaPrincipal();
//			  	case '7' : ;
//			  	case '8' : ;
//			  	case '9' : ;
//			  	case '10' : ;
//			  	case '11' : ;
//			  	case '12' : ;
//			  	case '13' : ;
//			  	case '14' : ;
//			  	case '15' : ;
//			  	case '16' : ;
//			  	case '17' : ;
//			  	case '18' : this.salir();
//			  	
		  	}
		}
		catch (Exception e)
		{
		}

	}
	
	
	private void modificarLineaPrincipal() {
		
	System.out.println("MODIFICAR LINEA PRINCIPAL");
	System.out.println("-------------------------");
	
	
	Vector <LineaView> lv = tm.obtenerLineaPincipal();
	
	if (lv.size()== 0){
		System.out.println("No existen Usuario");
	}else{
		
		System.out.println("LISTADO DE USUARIOS");
		for (int i=0;i<lv.size();i++){
			System.out.println("Numero:"+lv.elementAt(i).getNumero());
			System.out.println("Apellido:"+lv.elementAt(i).getUsuario().getApellido());
			System.out.println("----------------------------------------------------");
		}
		
		//Modificar Linea Principal (Plan)
		
		
	}
	mostrarMenu();
}
	private void crearLineaPrincipal() {
		try
		{
			//TODO falta hacer el obtenerPlan para listarlos
			
						
			BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
			
			Vector <UsuarioView> uv = tm.obtenerUsuario();
			
			if (uv.size()== 0){
				System.out.println("No existen Usuario");
			}else{
				
				System.out.println("LISTADO DE USUARIOS");
				for (int i=0;i<uv.size();i++){
					System.out.println("Dni:"+uv.elementAt(i).getDni());
					System.out.println("Nombre:"+uv.elementAt(i).getNombre());
					System.out.println("Apellido:"+uv.elementAt(i).getApellido());
					System.out.println("----------------------------------------");
				}	
					
					System.out.println("CREAR LINEA PRINCIPAL");
					System.out.println("----------------------");
					System.out.println("Ingrese Dni del Usuario:");
					int dni = Integer.parseInt(reader.readLine());
					
					if (tm.existeUsuario(dni)){
						System.out.println("Ingrese Plan:");
						int nroPlan = Integer.parseInt(reader.readLine());
						
						if (tm.existePlan(nroPlan)){
							int numero = tm.crearLineaPrincipal(dni,nroPlan);
							if (numero == 0){
								System.out.println("No se pudo Crear la linea Principal al usuario con dni "+  dni);
							}else{
								System.out.println("El Numero asignado es "+ numero);
							}	
						}else
							System.out.println("No existe el plan solicitado");
						
							
					}else{
						System.out.println("No existe el usuario");
					}
				
					
				}
			
					
		mostrarMenu();
		}
		catch(Exception e)
		{
		}
		
	}

	private void agregarLineaAdicional() {

		try
		{
						
			Vector <UsuarioView> uv = tm.obtenerUsuario();
			
			if (uv.size()== 0){
				System.out.println("No existen Usuario");
			}else{
				BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
				System.out.println("AGREGAR LINEA ADICIONAL");
				System.out.println("---------------");
				System.out.println("Ingrese Dni del Usuario:");
				int dni = Integer.parseInt(reader.readLine());
				
				if (tm.existeUsuario(dni)){
					System.out.println("Ingrese Nombre del Adicional:");
					String nombreAdicional = reader.readLine();
					
					//TODO nroPLan 2 (Adicional) TEST 
					int numero = tm.crearLineaAdicional(dni, nombreAdicional,2);
					if (numero == 0){
						System.out.println("No se pudo Crear la linea Adicional al usuario con dni "+  dni);
					}else{
						System.out.println("El Numero asignado es "+ numero);
					}
				
				}else{
					System.out.println("No existe el usuario");
				}
				
			}
			
			
		mostrarMenu();
		}
		catch(Exception e)
		{
		}
		
	}
	

	private void modificarUsuario() {
		
		try
		{
			
			Vector <UsuarioView> uv = tm.obtenerUsuario();
			
			if (uv.size()== 0){
				System.out.println("No existen Usuario");
			}else{
				
				System.out.println("LISTADO DE USUARIOS");
				for (int i=0;i<uv.size();i++){
					System.out.println("Dni:"+uv.elementAt(i).getDni());
					System.out.println("Nombre:"+uv.elementAt(i).getNombre());
					System.out.println("Apellido:"+uv.elementAt(i).getApellido());
					System.out.println("----------------------------------------");
					
				}
				
				BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
				System.out.println(">>MODIFICAR USUARIO");
				System.out.println("---------------");
				System.out.println("Ingrese Dni:");
				int dni = Integer.parseInt(reader.readLine());
				
				if (tm.existeUsuario(dni)){
					System.out.println("Ingrese Nombre:");
					String nombre = reader.readLine();
					System.out.println("Ingrese Apellido:");
					String apellido = reader.readLine();
					System.out.println("Ingrese Domiclio:");
					String domicilio = reader.readLine();
					System.out.println("Ingrese Telefono:");
					int telefono = Integer.parseInt(reader.readLine());
					
					boolean mu = tm.modificarUsuario (dni, nombre, apellido, domicilio,telefono);
					
					if (mu == true){
						System.out.println("Se modifico el usuario");
					}else{
						System.out.println("No se pudo modificar el usuario");
					}
						
					
				}else{
					System.out.println("No existe el usuario a modificar");
				}
					
			}
				
			mostrarMenu();
		}
		catch(Exception e)
		{
		}
	}

	
	public void borrarUsuario(){
		try
		{
			
			Vector <UsuarioView> uv = tm.obtenerUsuario();
			
			if (uv.size()<0){
				System.out.println("No existen Usuario");
			}else{
				
				System.out.println("LISTADO DE USUARIOS");
				for (int i=0;i<uv.size();i++){
					System.out.println("Dni:"+uv.elementAt(i).getDni());
					System.out.println("Nombre:"+uv.elementAt(i).getNombre());
					System.out.println("Apellido:"+uv.elementAt(i).getApellido());
					System.out.println("----------------------------------------");
					
				}
				
				BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
				System.out.println(">>BORRAR USUARIO");
				System.out.println("---------------");
				System.out.println("Ingrese Dni:");
				int dni = Integer.parseInt(reader.readLine());
				
				if (tm.existeUsuario(dni)){
					
					boolean bu = tm.borrarUsuario(dni);
					
					if (bu == true){
						System.out.println("Se borro el usuario");
					}else
						System.out.println("No se pudo borrar el usuario");
					
				}else
					System.out.println("No existe el usuario a modificar");
			}
				
			mostrarMenu();
		}
		catch(Exception e)
		{
		}
	}


	public void salir() 
	{
		System.exit(0);
	}
	
	
	public void crearUsuario(){
		
		try
		{
			BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
			System.out.println("CREAR USUARIO");
			System.out.println("---------------");
			System.out.println("Ingrese Nombre:");
			String nombre = reader.readLine();
			System.out.println("Ingrese Apellido:");
			String apellido = reader.readLine();
			System.out.println("Ingrese Dni:");
			int dni = Integer.parseInt(reader.readLine());
			System.out.println("Ingrese Domiclio:");
			String domicilio = reader.readLine();
			System.out.println("Ingrese Telefono:");
			int telefono = Integer.parseInt(reader.readLine());
			
			//TODO ver el tema de datos obligatorios y validacion
			boolean cu = tm.crearUsuario(dni, nombre, apellido, domicilio, telefono);
			
			if (cu == true){
				System.out.println("Se creo satisfactoriamente el Usuario");
			}else
				System.out.println("Se produjo un error al crear el Usuario");
			
			mostrarMenu();
		}
		catch(Exception e)
		{
		}
	}
	
	
	public static void main(java.lang.String[] args) 
	{
	
		MainTelefoniaMovil main = new MainTelefoniaMovil();
		main.mostrarMenu();
	}
	
	
}
